﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Dubbo.Rpc.Protocol
{
    public class ProtocolListenerWrapper : IProtocol
    {
        private readonly IProtocol protocol;

        public ProtocolListenerWrapper(IProtocol protocol)
        {
            if (protocol == null)
            {
                throw new ArgumentNullException("protocol == null");
            }
            this.protocol = protocol;
        }

        public int GetDefaultPort()
        {
            return protocol.GetDefaultPort();
        }

        public IExporter<T> Export<T>(IInvoker<T> invoker)
        {
            //    if (Constants.REGISTRY_PROTOCOL.equals(invoker.getUrl().getProtocol())) {
            //        return protocol.export(invoker);
            //    }
            //return new ListenerExporterWrapper<T>(protocol.export(invoker), 
            //        Collections.unmodifiableList(ExtensionLoader.getExtensionLoader(ExporterListener.class)
            //                .getActivateExtension(invoker.getUrl(), Constants.EXPORTER_LISTENER_KEY)));
            return protocol.Export(invoker);
        }

        public IInvoker<T> Refer<T>(URL url)
        {
            //if (Constants.REGISTRY_PROTOCOL.equals(url.getProtocol())) {
            //    return protocol.refer(type, url);
            //}
            //return new ListenerInvokerWrapper<T>(protocol.refer(type, url), 
            //        Collections.unmodifiableList(
            //                ExtensionLoader.getExtensionLoader(InvokerListener.class)
            //                .getActivateExtension(url, Constants.INVOKER_LISTENER_KEY)));
            return protocol.Refer<T>(url);
        }

        public void Destroy()
        {
            protocol.Destroy();
        }
    }
}
